package br.uniceub.fsw.academicmobile.control;

import br.uniceub.fsw.academicmobile.dao.AlunoDAO;
import br.uniceub.fsw.academicmobile.dao.AulaDAO;
import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import br.uniceub.fsw.academicmobile.dao.FrequenciaDAO;
import br.uniceub.fsw.academicmobile.dao.HistoricoDAO;
import br.uniceub.fsw.academicmobile.dao.MencaoDAO;
import br.uniceub.fsw.academicmobile.dao.TurmaDAO;
import br.uniceub.fsw.academicmobile.vo.AlunoVO;
import br.uniceub.fsw.academicmobile.vo.AulaVO;
import br.uniceub.fsw.academicmobile.vo.CursoVO;
import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import br.uniceub.fsw.academicmobile.vo.FaculdadeVO;
import br.uniceub.fsw.academicmobile.vo.FrequenciaVO;
import br.uniceub.fsw.academicmobile.vo.HistoricoVO;
import br.uniceub.fsw.academicmobile.vo.MencaoVO;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.SgMencaoVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import java.util.Date;

/**
 * Classe que gerencia as operações de pauta
 * pauta abrange: frequencia, menção, resumo de turma e alteração de notas de aula
 * @author Christian Miranda
 */
public class PautaBO {

	private ProfessorVO professor;
        private AlunoVO aluno;
	private DisciplinaVO disciplina;
        private TurmaVO turma;
	private CursoVO curso;
        private MencaoVO mencao;
        private HistoricoVO historico;
        private AulaVO aula;
        private FaculdadeVO faculdade;
        private FrequenciaVO frequencia;
        private SgMencaoVO sgMencao;
        private AulaDAO daoAula;
        private HistoricoDAO daoHistorico;
        private FrequenciaDAO daoFrequencia;
        private AlunoDAO daoAluno;
        private TurmaDAO daoTurma;
        private MencaoDAO daoMencao;
        private Date data;
	
        /**
         * Metodo de interação com a tela
         * @param request dados do formulário
         * @return String dados de retorno das operações para a tela
         */
	public String operacao(HttpServletRequest request) {
		professor = (ProfessorVO) request.getSession().getAttribute("professor");
		String operacao = request.getParameter("operacao");
		if(operacao.equals("operar")){
                    operacao = request.getParameter("opcao");
                    if(operacao.equals("1")){
                        return "document.getElementById(\"conteudo\").innerHTML = \""+telaFrequencia(request)+"\";";
                    }
                    if(operacao.equals("2")){
                        return "document.getElementById(\"conteudo\").innerHTML = \""+telaMencao(request)+"\";";
                    }
                    if(operacao.equals("3")){
                        return telaNotaAula(request);
                    }
                    if(operacao.equals("4")){
                        return telaResumo(request);
                    }
		}
		if(operacao.equals("atualizarFrequencia")){
                    return "alert('"+processarFrequencia(request)+"');" +
                            "document.getElementById(\"conteudo\").innerHTML = \""+telaFrequencia(request)+"\";";
                }
                if(operacao.equals("atualizarMencao")){
                    return "alert('"+processarMencao(request)+"');" +
                            "document.getElementById(\"conteudo\").innerHTML = \""+telaMencao(request)+"\";";
                }
                if(operacao.equals("atualizarNotaAula")){
                           String retorno = processarNotaAula(request);
                    return telaNotaAula(request)+"<br /><br />"+
                           retorno;
                }
		return "";
	}
	
	/**
	 * Recebe o professor e retorna uma combo com a lista de turmas relacionadas
	 * a ele.
	 * @param professor professor recebido da session.
	 * @return String String com o codigo da combo.
	 */
	public String getComboTurma(HttpServletRequest request) {
            professor = (ProfessorVO) request.getSession().getAttribute("professor");
            StringBuffer sb = new StringBuffer();
            daoTurma = new TurmaDAO();
            ArrayList aList = new ArrayList();
            if(professor.getStCoordenador().equals("S")){
                aList = daoTurma.consultarTurmaPorProfessor(professor);
                turma = (TurmaVO) aList.get(0);
                aList = daoTurma.consultarTurmaPorCurso(turma.getCurso());
            } else {
                aList = daoTurma.consultarTurmaPorProfessor(professor);
            }
            sb.append("<SELECT NAME='cbTurma'>");
            sb.append("<OPTION VALUE='0'>Escolha uma Turma</OPTION>");
            for (int i = 0; i < aList.size(); i++) {
                turma = (TurmaVO) aList.get(i);
                disciplina = turma.getDisciplina();
                sb.append("<OPTION VALUE='" + turma.getIdTurma().toString() + "'>" +
                        disciplina.getNoDisciplina()+ " "+ turma.getSgTurma() + "</OPTION>");
            }
            sb.append("</SELECT>");

            return sb.toString();
    }
        
        public String getComboMes(TurmaVO turma, int mes){
            StringBuffer sb = new StringBuffer();
            sb.append("<SELECT NAME='cbmes' onchange='mudaData()'>");
            String[] selected = new String[11];
            for(int i=0;i<selected.length;i++){
                selected[i] = "";
                if((i + 2)== mes){
                    selected[i] = "SELECTED";
                }
            }
            
            if(turma.getNrSemestre()==1){
                sb.append("<OPTION "+selected[0]+" VALUE='01'>Fevereiro</OPTION>");
                sb.append("<OPTION "+selected[1]+" VALUE='02'>Marco</OPTION>");
                sb.append("<OPTION "+selected[2]+" VALUE='03'>Abril</OPTION>");
                sb.append("<OPTION "+selected[3]+" VALUE='04'>Maio</OPTION>");
                sb.append("<OPTION "+selected[4]+" VALUE='05'>Junho</OPTION>");
                sb.append("<OPTION "+selected[5]+" VALUE='06'>Julho</OPTION>");
            } else {
                sb.append("<OPTION "+selected[6]+" VALUE='07'>Agosto</OPTION>");
                sb.append("<OPTION "+selected[7]+" VALUE='08'>Setembro</OPTION>");
                sb.append("<OPTION "+selected[8]+" VALUE='09'>Outubro</OPTION>");
                sb.append("<OPTION "+selected[9]+" VALUE='10'>Novembro</OPTION>");
                sb.append("<OPTION "+selected[10]+" VALUE='11'>Dezembro</OPTION>");
            }
            sb.append("</SELECT>");
            return sb.toString();
        }

    private String processarFrequencia(HttpServletRequest request) {
        String retorno ="Dados alterados com sucesso";
        daoAluno = new AlunoDAO();
        daoAula = new AulaDAO();
        daoHistorico = new HistoricoDAO();
        daoFrequencia = new FrequenciaDAO();
        int faltasAluno = 0;
        
        turma = (TurmaVO) request.getSession().getAttribute("turma");
        data = new Date();
        data.setMonth(Integer.parseInt(request.getParameter("mes")));
        ArrayList listaAlunos = daoAluno.consultarAlunoPorTurma(turma);
        Iterator itAlunos = listaAlunos.iterator();
        while(itAlunos.hasNext()){
            aluno = (AlunoVO) itAlunos.next();
            ArrayList listaAulas = daoAula.consultarAulaPorMesTurma((data.getMonth() +1 ),turma);
            Iterator itAula = listaAulas.iterator();    
            while(itAula.hasNext()){
                historico = new HistoricoVO();
                aula = (AulaVO) itAula.next();
                historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
                frequencia = daoFrequencia.getFrequenciaPorHistoricoAula(historico, aula);
                String pres1 = request.getParameter(frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X1");
                String pres2 = request.getParameter(frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X2");
                if(pres1==null){
                    frequencia.setTpFrequencia1("P");
                } else {
                    frequencia.setTpFrequencia1(pres1);
                }
                if(pres2==null){
                    frequencia.setTpFrequencia2("P");
                } else {
                    frequencia.setTpFrequencia2(pres2);
                }
                if(daoFrequencia.alterarFrequencia(frequencia)==false){
                    retorno = "Erro ao alterar dados";
                }
            }
            int mesInicial = 2;
            int mesFinal = 8;
            faltasAluno = 0;
            if(turma.getNrSemestre()==2){
                    mesInicial = 7;
                    mesFinal = 13;
                }
            historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
            for(int r=mesInicial;r<mesFinal;r++){
                listaAulas = daoAula.consultarAulaPorMesTurma(r,turma);
                Iterator itAulas = listaAulas.iterator();
                while(itAulas.hasNext()){
                    aula = (AulaVO) itAulas.next();
                    frequencia = daoFrequencia.getFrequenciaPorHistoricoAula(historico, aula);
                    if(frequencia.getTpFrequencia1().equals("F")){
                        faltasAluno++;
                    }
                    if(frequencia.getTpFrequencia2().equals("F")){
                        faltasAluno++;
                    }
                }
            }
            historico.setQtFrequencia(faltasAluno);
            daoHistorico.alterarHistorico(historico);
        }
        return retorno;
    }
        
	
	private String telaFrequencia(HttpServletRequest request){
            professor = (ProfessorVO) request.getSession().getAttribute("professor");
            data = new Date();
            if(request.getParameter("cbmes")== null){
                data.setMonth(data.getMonth());
            } else {
                data.setMonth(Integer.parseInt(request.getParameter("mes")));
            }
            daoTurma = new TurmaDAO();
            daoFrequencia = new FrequenciaDAO();
            daoAula = new AulaDAO();
            daoHistorico = new HistoricoDAO();
            turma = new TurmaVO();
            daoAluno = new AlunoDAO();
            if(request.getParameter("cbTurma") == null){
               turma = (TurmaVO) request.getSession().getAttribute("turma");
            } else {
                turma.setIdTurma(new Integer(request.getParameter("cbTurma")));
                turma = daoTurma.consultarTurmaPorId(turma);
                request.getSession(true).setAttribute("turma",turma);
            }
            curso = turma.getCurso();
            faculdade = curso.getFaculdade();
            disciplina = turma.getDisciplina();       
            StringBuffer sb = new StringBuffer();
            ArrayList listaAulas = daoAula.consultarAulaPorMesTurma(data.getMonth()+1,turma);
            professor = turma.getProfessor();
            sb.append(getCabecalhoPauta(faculdade, curso, disciplina, turma, professor));        
            sb.append("<div width='96%'>" +
                    "<input type='hidden' name='operacao' value='operar'/>"+
                    "<input type='hidden' name='opcao' value='1'/>"+
                    "<input type='hidden' name='mes' value='"+(data.getMonth())+"'/>"+
                    getComboMes(turma,data.getMonth()+1)+
                    "</div>");
            sb.append("<br/><table width='96%'>"+
                            "<tr><td>Numero</td><td>Nome</td><td>RA</td>");
            Iterator itAula = listaAulas.iterator();
            while(itAula.hasNext()){
                aula = (AulaVO) itAula.next();
                sb.append("<td colspan='2'>"+aula.getDtAula().getDate()+"</td>");
            }
            sb.append("<td>Total de faltas</td></tr>");
            ArrayList listaAlunos = daoAluno.consultarAlunoPorTurma(turma);
            Iterator itAlunos = listaAlunos.iterator();
            int i = 1;
            int c = 0;
            
            while(itAlunos.hasNext()){
                    aluno = (AlunoVO) itAlunos.next();
                    sb.append("<tr><td>"+i+"</td><td>"+aluno.getNoAluno()+"</td>" +
                                    "<td>"+aluno.getIdCdRa()+"</td>");
                    itAula = listaAulas.iterator();
                    int presenca = 0;       
                    while(itAula.hasNext()){
                        historico = new HistoricoVO();
                        aula = (AulaVO) itAula.next();
                        historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
                        frequencia = daoFrequencia.getFrequenciaPorHistoricoAula(historico, aula);
                        c++;
                        if(frequencia.getTpFrequencia1()== null || frequencia.getTpFrequencia1().equals("F")){
                            sb.append("<td><input type='radio' name='"+frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X1'" +
                                " id='"+c+"' value='F' onclick='checa(this.id)'CHECKED/></td>");
                        } else {
                            sb.append("<td><input type='radio' name='"+frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X1'" +
                                " id='"+c+"' value='P' onclick='checa(this.id)'/></td>");
                            presenca++;
                        }
                        c++;
                        if(frequencia.getTpFrequencia2()== null || frequencia.getTpFrequencia2().equals("F")){
                            sb.append("<td><input type='radio' name='"+frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X2'" +
                                " id='"+c+"' value='F' onclick='checa(this.id)' CHECKED/></td>");
                        } else{
                            sb.append("<td><input type='radio' name='"+frequencia.getIdFrequencia()+"X"+aluno.getIdCdRa()+"X2'" +
                                " id='"+c+"' value='P' onclick='checa(this.id)'/></td> ");
                            presenca++;
                        }             
                    }
                    sb.append("<td><input type='text' value='"+(listaAulas.size()*2 - presenca)+"' id='total"+aluno.getIdCdRa()+"' disabled/></td></tr>");
                    i++;
            }
            sb.append("</table><br /><div align='center'>" +
                    "<input type='button' value='Atualizar' onclick='atualizar()'/>"+
                    "</div>");
            return sb.toString();
	}
        
        private String telaNotaAula(HttpServletRequest request){
            turma = new TurmaVO();
            daoTurma = new TurmaDAO();
            daoAula = new AulaDAO();
            StringBuffer sb = new StringBuffer();
            sb.append("<input type='hidden' name='operacao' value='operar'/>"+
                    "<input type='hidden' name='opcao' value='3'/>"+
                "<input type='hidden' name='aula' value='"+request.getParameter("cbaula")+"'/>");
            if(request.getParameter("cbTurma") == null){
               turma = (TurmaVO) request.getSession().getAttribute("turma");
            } else {
                turma.setIdTurma(new Integer(request.getParameter("cbTurma")));
                turma = daoTurma.consultarTurmaPorId(turma);
                request.getSession(true).setAttribute("turma",turma);
            }

            ArrayList listaAulas = daoAula.consultarAulaPorTurma(turma);
            Iterator itAulas = listaAulas.iterator();
            sb.append("<SELECT NAME='cbaula' onchange='mudaAula()'>");
            sb.append("<OPTION VALUE='0'>Escolha uma Aula</OPTION>");
            while(itAulas.hasNext()){
                aula = (AulaVO) itAulas.next();
                if(request.getParameter("aula") != null &&
                        request.getParameter("aula").equals(aula.getIdAula().toString())){
                    sb.append("<OPTION value='"+aula.getIdAula()+"' SELECTED='SELECTED'>"+
                    aula.getDtAula().getDate()+"/"+(aula.getDtAula().getMonth() +1)+"</OPTION>");
                }else {
                    sb.append("<OPTION value='"+aula.getIdAula()+"'>"+
                        aula.getDtAula().getDate()+"/"+(aula.getDtAula().getMonth() +1)+"</OPTION>");
                } 
            }
            sb.append("</SELECT>");
            sb.append("<br /><br />");
            if(request.getParameter("aula") != null && 
                    Integer.parseInt(request.getParameter("aula")) != 0){
                aula.setIdAula(new Integer(request.getParameter("aula")));
                aula = daoAula.ConsultarAulaPorId(aula);
                if(aula.getTeAula() == null || aula.getTeAula().equals("")){
                    sb.append("<textarea id='teAula' name='teAula' cols='100' rows='15' onKeyDown='validaTa(this.id)' onKeyUp='validaTa(this.id)'> " +
                            "Nenhuma nota de aula associada a esta aula</textarea>");
                    
                } else {
                    sb.append("<textarea id='teAula' name='teAula' cols='100' rows='15' onKeyDown='validaTa(this.id)' onKeyUp='validaTa(this.id)'>"+
                            aula.getTeAula()+"</textarea>");
                }
                sb.append("<br /><br /><input type='button' value='Atualizar' onclick='atualizar()' />");
            }
            
            return sb.toString();
        }
        
        private String processarNotaAula(HttpServletRequest request){
            String retorno;
            aula = new AulaVO();
            daoAula = new AulaDAO();
            aula.setIdAula(new Integer(request.getParameter("aula")));
            aula = daoAula.ConsultarAulaPorId(aula);
            aula.setTeAula(request.getParameter("teAula"));
            if(daoAula.alterarAula(aula)){
                retorno = "Dados alterados com sucesso";
            } else {
                retorno = "Erro na alteracao dos dados";
            }
            return retorno;
        }
        
        private String getCabecalhoPauta(FaculdadeVO f, CursoVO c, DisciplinaVO d, TurmaVO t,
                ProfessorVO p){
            StringBuffer sb = new StringBuffer();
            sb.append("<table width='96%'>" +
                            "<tr>" +
                            "<td align='left'>Faculdade: "+f.getNoFaculdade()+"</td>" +
                            "<td colspan='2' align='left'>Curso: "+c.getNoCurso()+"</td>" +
                            "</tr>" +
                            "<tr>" +
                            "<td align='left'>Disciplina: "+d.getNoDisciplina()+"</td>" +
                            "<td align='left'>Turno: "+t.getHrTurno()+"</td>" +
                            "<td align='right'>Turma: "+t.getSgTurma()+"</td>" +
                            "</tr>" +
                            "<tr>" +
                            "<td colspan='2' align='left'>Professor: "+p.getNoProfessor()+"</td>" +
                            "<td align='right'>Carga Horaria: "+d.getHrCarga()+"</td>" +
                            "</tr>" +
                            "</table>");
            return sb.toString();
        }
        
        private String telaMencao(HttpServletRequest request){
            daoTurma = new TurmaDAO();
            daoMencao = new MencaoDAO();
            daoAluno = new AlunoDAO();
            daoHistorico = new HistoricoDAO();
            historico = new HistoricoVO();
            turma = new TurmaVO();
            mencao = new MencaoVO();
            sgMencao = new SgMencaoVO();
            professor = (ProfessorVO) request.getSession().getAttribute("professor");
            if(request.getParameter("cbTurma") == null){
               turma = (TurmaVO) request.getSession().getAttribute("turma");
            } else {
                turma.setIdTurma(new Integer(request.getParameter("cbTurma")));
                turma = daoTurma.consultarTurmaPorId(turma);
                request.getSession(true).setAttribute("turma",turma);
            }
            curso = turma.getCurso();
            faculdade = curso.getFaculdade();
            disciplina = turma.getDisciplina();
            ArrayList listaAlunos = daoAluno.consultarAlunoPorTurma(turma);
            StringBuffer sb = new StringBuffer();
            sb.append(getCabecalhoPauta(faculdade, curso, disciplina, turma, professor));
            sb.append("<br /><table width='96%'>"+
                            "<tr><td>Numero</td><td>Nome</td><td>RA</td>" +
                            "<td colspan='5'>Mencoes</td><td>Mencao Final</td></tr>");
            Iterator itAlunos = listaAlunos.iterator();
            int i = 1;            
            while(itAlunos.hasNext()){
                    aluno = (AlunoVO) itAlunos.next();
                    sb.append("<tr><td>"+i+"</td><td>"+aluno.getNoAluno()+"</td>" +
                                    "<td>"+aluno.getIdCdRa()+"</td>");
                    i++;
                    historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
                    ArrayList listaMencoes = daoMencao.consultarMencaoPorHistorico(historico);
                    ArrayList listaSgMencoes = daoMencao.consultarTodasSiglasMencoes();
                    Iterator itMencoes = listaMencoes.iterator();  
                    while(itMencoes.hasNext()){
                        Iterator itSgMencoes = listaSgMencoes.iterator();
                        mencao = (MencaoVO) itMencoes.next();
                        sb.append("<td><SELECT name='"+mencao.getIdMencao()+"X"+aluno.getIdCdRa()+"'>");
                        while(itSgMencoes.hasNext()){
                            sgMencao = (SgMencaoVO)itSgMencoes.next();
                            if(mencao.getTbSgMencaoIdTipoMencao().equals(sgMencao.getIdSgMencao())){
                                sb.append("<OPTION value='"+sgMencao.getIdSgMencao()+"' SELECTED='SELECTED'>"
                                        +sgMencao.getSgMencao()+"</OPTION>");
                            } else {
                                sb.append("<OPTION value='"+sgMencao.getIdSgMencao()+"'>"
                                        +sgMencao.getSgMencao()+"</OPTION>");
                            }
                        }
                        sb.append("</SELECT></td>");
                    }
                    sb.append("<td><SELECT name='mencaoFinal"+historico.getIdHistorico()+"'>");
                    Iterator itSgMencoes = listaSgMencoes.iterator();
                    while(itSgMencoes.hasNext()){
                        sgMencao = (SgMencaoVO)itSgMencoes.next();
                        if( historico.getSgMencao()==null || !historico.getSgMencao().equals(sgMencao.getSgMencao())){
                            sb.append("<OPTION value='"+sgMencao.getSgMencao()+"'>"
                                        +sgMencao.getSgMencao()+"</OPTION>");
                        } else {
                            sb.append("<OPTION value='"+sgMencao.getSgMencao()+"' SELECTED='SELECTED'>"
                                        +sgMencao.getSgMencao()+"</OPTION>");
                        }
                    }
                    sb.append("</SELECT></td></tr>");
            }
            sb.append("</table><br /> <div align='center'>" +
                    "<input type='hidden' name='operacao' value='operar'/>" +
                    "<input type='button' value='Atualizar' onclick='atualizar()'/> </div>");
            return sb.toString();
        }
        
        private String processarMencao(HttpServletRequest request){
            String retorno ="Dados alterados com sucesso";
            daoTurma = new TurmaDAO();
            daoMencao = new MencaoDAO();
            daoAluno = new AlunoDAO();
            daoHistorico = new HistoricoDAO();
            historico = new HistoricoVO();
            turma = new TurmaVO();
            mencao = new MencaoVO();
            sgMencao = new SgMencaoVO();
            
            turma = (TurmaVO) request.getSession().getAttribute("turma");
            ArrayList listaAlunos = daoAluno.consultarAlunoPorTurma(turma);
            Iterator itAlunos = listaAlunos.iterator();
            while(itAlunos.hasNext()){
                aluno = (AlunoVO) itAlunos.next();
                historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
                ArrayList listaMencoes = daoMencao.consultarMencaoPorHistorico(historico);
                ArrayList listaSgMencoes = daoMencao.consultarTodasSiglasMencoes();
                Iterator itMencoes = listaMencoes.iterator();  
                Iterator itSgMencoes = listaSgMencoes.iterator();
                while(itMencoes.hasNext()){
                    mencao = (MencaoVO) itMencoes.next();
                    if(!mencao.getTbSgMencaoIdTipoMencao().equals(
                            new Integer(request.getParameter(mencao.getIdMencao().toString()+
                            "X"+aluno.getIdCdRa().toString())))){
                        mencao.setTbSgMencaoIdTipoMencao(
                            new Integer(request.getParameter(mencao.getIdMencao().toString()+
                            "X"+aluno.getIdCdRa().toString())));
                        mencao.setDtMencao(new Date());
                        if(daoMencao.alterarMencao(mencao)==false){
                            retorno = "Erro ao alterar dados";
                        }
                    }
                }
                while(itSgMencoes.hasNext()){
                    sgMencao = (SgMencaoVO)itSgMencoes.next();
                    historico.setSgMencao(request.getParameter("mencaoFinal"+historico.getIdHistorico()));
                    if(daoHistorico.alterarHistorico(historico)==false){
                        retorno = "Erro ao alterar dados";
                    }
                }
            }   
            
            return retorno;
        }
        
        private String telaResumo(HttpServletRequest request){
            daoTurma = new TurmaDAO();
            daoFrequencia = new FrequenciaDAO();
            daoAula = new AulaDAO();
            daoMencao= new MencaoDAO();
            daoHistorico = new HistoricoDAO();
            turma = new TurmaVO();
            daoAluno = new AlunoDAO();
            ArrayList listaAulas = new ArrayList();
            int mesInicial = 2;
            int mesFinal = 7;
            professor = (ProfessorVO) request.getSession().getAttribute("professor");
            turma.setIdTurma(new Integer(request.getParameter("cbTurma")));
            turma = daoTurma.consultarTurmaPorId(turma);
            curso = turma.getCurso();
            faculdade = curso.getFaculdade();
            disciplina = turma.getDisciplina();    
            StringBuffer sb = new StringBuffer(getCabecalhoPauta(
                    faculdade, curso, disciplina, turma, professor));
            sb.append("<br /><br /><table border='1' width='96%'>");
            sb.append("<tr><td rowspan='2'>Numero</td><td rowspan='2'>Nome</td>" +
                    "<td rowspan='2'>RA</td><td colspan='6'>Faltas</td>" +
                    "<td colspan='5'>Mencoes</td><td colspan='2'>Diário</td></tr><tr>");
            if(turma.getNrSemestre()==1){
                sb.append("<td>Fev</td><td>Mar</td><td>Abr</td><td>Mai</td><td>Jun</td><td>Jul</td>");
            }else{
                sb.append("<td>Jul</td><td>Ago</td><td>Set</td><td>Out</td><td>Nov</td><td>Dez</td>");
            }
            sb.append("<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td>");
            sb.append("<td> Total de Faltas</td><td>Mencao Final</td></tr><tr>");
            ArrayList ListaAlunos = daoAluno.consultarAlunoPorTurma(turma);
            int faltas = 0;
            for(int i = 0; i< ListaAlunos.size();i++){
                aluno = (AlunoVO) ListaAlunos.get(i);
                sb.append("<td>"+(i+1)+"</td><td>"+aluno.getNoAluno()+"</td><td>"
                        +aluno.getIdCdRa()+"</td>");
                if(turma.getNrSemestre()==2){
                    mesInicial = 7;
                    mesFinal = 13;
                }
                historico = daoHistorico.consultarHistoricoPorTurmaAluno(turma, aluno);
                for(int r=mesInicial;r<mesFinal;r++){
                    faltas = 0;
                    listaAulas = daoAula.consultarAulaPorMesTurma(r,turma);
                    Iterator itAulas = listaAulas.iterator();
                    while(itAulas.hasNext()){
                        aula = (AulaVO) itAulas.next();
                        frequencia = daoFrequencia.getFrequenciaPorHistoricoAula(historico, aula);
                        if(frequencia.getTpFrequencia1().equals("F")){
                            faltas++;
                        }
                        if(frequencia.getTpFrequencia2().equals("F")){
                            faltas++;
                        }
                    }
                    sb.append("<td>"+faltas+"</td>");
                }
                ArrayList listaMencoes = daoMencao.consultarMencaoPorHistorico(historico);
                Iterator itMencoes = listaMencoes.iterator();
                while(itMencoes.hasNext()){
                    mencao = (MencaoVO) itMencoes.next();
                    sb.append("<td>"+mencao.getSgMencao().getSgMencao()+"</td>");
                }
                sb.append("<td>"+historico.getQtFrequencia()+"</td><td>"+historico.getSgMencao()+"</td>");
                sb.append("<tr/>");
            }
            sb.append("</table>");
            return sb.toString();
        }
	
}
